/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package logica;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.StringTokenizer;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Carlos
 */
public class ControlRespaldo {
    
    /**
     * Dada la dirección ip del servidor, adminitra el socket que pedirá el archivo
     * que se encuentra en el servidor de respaldo.
     * @param Dirección IP del servidor.
     * @return 1 si la operación es exitosa.
     * @throws UnknownHostException, IOException.
     */
    public int ActualizarDelServidor(String IP) throws UnknownHostException, IOException, Exception{
                String path;
                Socket Cliente;
                int respuesta = 0;
                int len;
        byte[] buffer;
        try {
            Cliente = new Socket(IP, 9999);
        
                PrintWriter salida = new PrintWriter(Cliente.getOutputStream(), true);
                BufferedReader entrada = new BufferedReader(new InputStreamReader(Cliente.getInputStream()));
                InputStream llegada = Cliente.getInputStream();
                salida.println("<mensaje>" + "Actualizar" + "</mensaje>");
                if (entrada.readLine().equals("Ok")) {                   
                    path = System.getProperty("user.dir") + "/archivo/ArchivosUsuario.xml";
                    File fichero = new File (path);
                    try {
                        // A partir del objeto File creamos el fichero físicamente
                        if (fichero.createNewFile())
                            System.out.println("El fichero se ha creado correctamente");
                        else
                            System.out.println("No ha podido ser creado el fichero");
                    } catch (IOException ioe) {
                    ioe.printStackTrace();
                    }
                    FileOutputStream destino = new FileOutputStream(path);
                    buffer = new byte[1024];
                    while (1 == 1) {
                        len = llegada.read(buffer);
                        if (len <= 0) {
                            respuesta = 1;
                            break;
                        } else {
                            destino.write(buffer, 0, len);
                        }
                    }
                  }
                    
                
                Cliente.close();    
            } catch (UnknownHostException ex) {
                throw ex;
            } catch (IOException ex) {
                throw ex;
            } catch (Exception ex){
                throw ex;
            }
        
        return respuesta;
    }
    
    /**
     * Dada la dirección ip del servidor, adminitra el socket que guardará el archivo
     * en el servidor de respaldo.
     * @param Dirección IP del servidor.
     * @return 1 si la operación es exitosa.
     * @throws UnknownHostException, IOException.
     */
    public int GuardarEnRespaldo(String IP) throws UnknownHostException, IOException, Exception{
                String path;
                Socket Cliente;
                int respuesta = 0;
                int len;
        byte[] buffer;
        try {
            Cliente = new Socket(IP, 9999);
        
                PrintWriter salida = new PrintWriter(Cliente.getOutputStream(), true);
                BufferedReader entrada = new BufferedReader(new InputStreamReader(Cliente.getInputStream()));
                InputStream llegada = Cliente.getInputStream();
                salida.println("<mensaje>" + "Guardar" + "</mensaje>");
                if (entrada.readLine().equals("Ok")) {
                    path = System.getProperty("user.dir") + "/archivo/ArchivosUsuario.xml";
                    PrintStream envio = new PrintStream(Cliente.getOutputStream());
                    FileInputStream origen = new FileInputStream(path);
                    buffer = new byte[1024];
                    while (1 == 1) {
                        len = origen.read(buffer);
                        //llego = entrada.readLine();
                        if (len <= 0) {
                            envio.close();
                            respuesta = 1;
                            break;
                        } else {
                            envio.write(buffer, 0, len);
                        }
                    }
                }
                  
                    
                
                Cliente.close();    
            } catch (UnknownHostException ex) {
                throw ex;
            } catch (IOException ex) {
                throw ex;
            } catch (Exception ex){
                throw ex;
            }
        
        return respuesta;
    }
    
    public String ObtenerIp() throws FileNotFoundException, Exception{
        String IP=null;
        String path = System.getProperty("user.dir") + "/archivo/Conf.xml";
        StringTokenizer tokens = null;
        try{
        File f = new File( path );
        BufferedReader entrada = new BufferedReader( new FileReader( f ) );
        if (f.exists()){
            String texto = entrada.readLine();
            tokens = new StringTokenizer(texto,"<>");
        }
        
        IP = tokens.nextToken();
        IP = tokens.nextToken();}catch(FileNotFoundException ex){
            throw ex;
        }catch(Exception ex){
            throw ex;
        }
        return IP;
    }
}
